package com.example.controller.MathTool;

import com.example.entity.RestBean;
import com.example.entity.dto.MathTool.MathTool;
import com.example.entity.vo.request.math.*;
import com.example.entity.vo.response.math.*;
import com.example.service.MathToolService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 数学工具控制器
 *
 * @auth shanyue
 * @date 2025年07月09日14:32
 */
@RestController
@RequestMapping("/api/mathTool")
public class MathToolController {

    @Resource
    private MathToolService mathToolService;

    /**
     * 获取所有数学工具的列表
     *
     * @return 包含所有MathTool对象的RestBean
     */
    @GetMapping("/getMathToolList")
    public RestBean<List<MathTool>> getMathToolList() {
        List<MathTool> list = mathToolService.list();
        return RestBean.success(list);
    }

    /**
     * 根据路径参数查询对应的数学工具详细信息
     *
     * @param path 工具的唯一路径标识
     * @return 对应的MathTool信息，不存在返回404
     */
    @GetMapping("/getInfo")
    public RestBean<MathTool> getMathToolInfo(@RequestParam("path") String path) {
        MathTool mathTool = mathToolService.getInfoByPath(path);
        if (mathTool != null) {
            return RestBean.success(mathTool);
        } else {
            return RestBean.failure(404, "找不到对应工具信息");
        }
    }

    /**
     * 根据请求体中的参数，执行数字转换功能
     *
     * @param requestVO 请求体，包含需要转换的数字以及类型
     * @return 封装在RestBean的数字转换结果
     */
    @PostMapping("/getNumberChangeResult")
    public RestBean<NumberChangeResponseVO> getNumberChangeResult(@RequestBody NumberChangeRequestVO requestVO) {
        NumberChangeResponseVO result = mathToolService.getNumberChangeResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 根据请求的面积类型和数据，返回所有面积单位的换算结果
     *
     * @param requestVO 请求体，包含面积单位类型和数值字符串
     * @return 封装在RestBean的面积换算结果
     */
    @PostMapping("/getAreaChangeResult")
    public RestBean<AreaChangeResponseVO> getAreaChangeResult(@RequestBody AreaChangeRequestVO requestVO) {
        AreaChangeResponseVO result = mathToolService.getAreaChangeResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 根据请求体中的单位类型和数值，执行字节单位换算功能
     *
     * @param requestVO 请求体，包含字节单位类型和输入数值
     * @return 封装在RestBean中的字节单位换算后的结果列表
     */
    @PostMapping("/getByteChangeResult")
    public RestBean<List<ByteChangeResponseVO>> getByteChangeResult(@RequestBody ByteChangeRequestVO requestVO) {
        List<ByteChangeResponseVO> result = mathToolService.getByteChangeResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 根据请求体中的长度单位类型和输入数值，执行长度单位换算功能
     *
     * @param requestVO 请求体，包含长度单位类型和输入数值文本
     * @return 封装在RestBean中的长度单位换算后的结果列表
     */
    @PostMapping("/getLengthChangeResult")
    public RestBean<List<LengthChangeResponseVO>> getLengthChangeResult(@RequestBody LengthChangeRequestVO requestVO) {
        List<LengthChangeResponseVO> result = mathToolService.getLengthChangeResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 根据请求体中的质量单位类型和输出数值，执行质量单位换算
     *
     * @param requestVO 请求体，包含单位类型和输入数值
     * @return 封装在RestBean中的质量单位换算后的结果列表
     */
    @PostMapping("/getQualityChangeResult")
    public RestBean<List<QualityChangeResponseVO>> getQualityChangeResult(@RequestBody QualityChangeRequestVO requestVO) {
        List<QualityChangeResponseVO> result = mathToolService.getQualityChangeResult(requestVO);
        return RestBean.success(result);
    }

    /**
     * 根据请求体中的时间单位类型和输入数值，执行时间单位换算功能
     *
     * @param requestVO 请求体，包含时间单位类型和输入数值文本
     * @return 封装在RestBean中的时间单位换算结果列表
     */
    @PostMapping("/getTimeChangeResult")
    public RestBean<List<TimeChangeResponseVO>> getTimeChangeResult(@RequestBody TimeChangeRequestVO requestVO) {
        List<TimeChangeResponseVO> result = mathToolService.getTimeChangeResult(requestVO);
        return RestBean.success(result);
    }

}
